﻿/********************************************************************
	created:	2016/03/24
	created:	24:3:2016   15:08
	filename: 	e:\XuanwuCode\branches\branches_gns\XuanwuClient\AllGame\GnsClientFrame\proj.win32\CGnsOften.h
	file path:	e:\XuanwuCode\branches\branches_gns\XuanwuClient\AllGame\GnsClientFrame\proj.win32
	file base:	CGnsOften
	file ext:	h
	author:		hgj
	
	purpose:	常用功能的封装。这个类封装与 cocos2d 无关的内容。
*********************************************************************/

#ifndef  C_GNS_OFFTEN
#define C_GNS_OFFTEN

#include <iostream>  // std::cout
#include <string>

using namespace std;

class CCGnsOften
{
public:
	CCGnsOften();
	virtual ~CCGnsOften();

public:

	/* --------------------------------------------------------------------------
	函数说明：判断两个浮点数是否相等
	传入参数：
		f1						浮点数1
		f2						浮点数2
		errorRange	误差范围，两个浮点数的差值的绝对值在此范围内，视为相等
	返回值：
		相等返回 true，不相等则返回 false
	-------------------------------------------------------------------------- */
	static bool floatEqual(float f1, float f2, float errorRange = 0.001);

	// 取大值
	static float maxFloat(float x, float y);

	// 取小值
	static float minFloat(float x, float y);

	/* --------------------------------------------------------------------------
	函数说明：安全的字符串拷贝
	传入参数：
		iDstSize		目标字串的最大尺寸，即 sizeof 的值
		szSrc			源字串
		iSrcLen		源字串的长度，即 strlen 的值
	传出参数：
		szDst			目标字串
	返回值：
		返回拷贝成功的长度。
	-------------------------------------------------------------------------- */
	static int snprintf_safe(char* szDst, int iDstSize, const char* szSrc, int iSrcLen);

	/* --------------------------------------------------------------------------
	函数说明：安全的字符串拷贝
	传入参数：
		iDstSize		目标内存块的最大尺寸，即 sizeof 的值
		szSrc			源内存块
		iSrcSize		源内存块的长度，即 sizeof 的值
	传出参数：
		szDst			目标内存块
	返回值：
		返回拷贝成功的长度。
	-------------------------------------------------------------------------- */
	static int memcpy_safe(char* szDst, int iDstSize, const char* szSrc, int iSrcSize);

	/* --------------------------------------------------------------------------
	函数说明：获得“在代码里直接赋值”的字串内容的 UTF8 值
	传入参数：
	    strIn	直接在代码里输入的字串，strIn 在代码里直接赋值的差异：
	                Windows 下：GB2312 格式
	                Android   下：UTF8 格式
	返回值：
	    根据三大平台（Windows、Android、IOS），返回相应的 UTF8值
	-------------------------------------------------------------------------- */
	static std::string  getUtf8_DirectAssignmentInProgram(const std::string&  strIn);

	/* --------------------------------------------------------------------------
	函数说明：获得“在代码里直接赋值”的字串内容的 GB2312 值
	传入参数：
		strIn	直接在代码里输入的字串，strIn 在代码里直接赋值的差异：
					Windows 下：GB2312 格式
					Android   下：UTF8 格式
	返回值：
		根据三大平台（Windows、Android、IOS），返回相应的 GB2312 值
	-------------------------------------------------------------------------- */
	static std::string  getGB2312_DirectAssignmentInProgram(const std::string&  strIn);

	/* --------------------------------------------------------------------------
	函数说明：判断字符串是否 GB2312 的编码，
					注意：此函数通过了 test_gb2312_forward_direction 和 test_gb2312_negative_direction 验证
							  此函数的测试程度有限，若要做到精准判断，还需要更深入和更大量的测试。
							  目前仅仅作为参考性的判断。
	传入参数：
		strIn		要判断的字符串
	返回值：
		true   strIn 为 GB2312 的编码
		false  strIn 为 非GB2312（可能是UTF8） 的编码
	-------------------------------------------------------------------------- */
	static bool IsGB2312(const string& strIn);
	static bool isNumber(string &s);
	static bool isNoChinese(string &s);
	static bool checkStrLength(string &s,int minLen = 0,int maxLen = 90);
	static bool isNoSpace(string &s);

	//检查管理账号 全数字 6-14
	static bool checkMgrID(string &s);
	//检查玩家账号 英文数字 6-14
	static bool checkPlayerID(string &s);
	//检查玩家昵称 6-14
	static bool checkPlayerName(string &s);
	//检查备注名 6-14
	static bool checkRemarkName(string &s);
	//检查手机号 全数字20
	static bool checkPhoneNum(string &s);
	//检查密码 英文数字6-14
	static bool checkPassWord(string &s);
	//检查备注 90
	static bool checkBeiZhu(string &s);
};

#endif